{
/* 
function getId<T>(val:T){
    console.log(val.length)//报错：T时一个位置的类型，所以无法得知它到底有没有length
    return val
}
*/
// let arr:string[]=[]

// 指定更加明确的类型：T类型的数组
/* 
function getIds<T>(val:T[]){
    console.log(val.length)
    return val
}
getIds([1,2,3])
*/

// 类型收缩：比较麻烦
/* 
function getIds<T>(val:T){
    if(typeof val==='string'){
        console.log(val.length)
    }else if(typeof val==='number'){
        val.toFixed()
    }
    return val
}
getIds('str')
*/


// 定义接口
interface ILength{
    length:number
    // sayHi:()=>void
}
// 添加约束
function getIds<T extends ILength>(val:T){
  console.log( val.length)
//    val.sayHi()
    return val
}
console.log(getIds<string>('abc'))
console.log(getIds<number>(123))//number没有length属性，所以报错
}